package interfaces;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

import controle.Controle;

/**
 * 
 * Classe Interface.java que representa a interface que conterá as telas que
 * interagirão com o usuário, esta interface também captará as opções digitadas
 * no teclado
 * 
 * @desc Projeto BombarJ
 * @author Simone Carneiro Streitenberger 11888 CCO2003
 * @author Thiago Nascimento Comicio 11889 CCO2003
 * @professor Edison de Jesus
 * @disciplina Computação Gráfica 2 - CCO812
 * 
 */
public class Interface extends JFrame implements KeyListener {

	private static final long serialVersionUID = 1L;

	// painel onde serão exibidos as interfaces
	private JPanel painelConteudo = null;

	// objeto que controla a aplicação
	private Controle controle;

	/**
	 * 
	 * Construtor da classe Interface.java
	 * 
	 */
	public Interface() {
		super();

		// adiciona um captador de eventos do teclado
		this.addKeyListener(this);

		// inicializa a interface
		inicializar();
	}

	/**
	 * 
	 * Método que tem por função inicializar a interface
	 * 
	 */
	private void inicializar() {
		// seta as características da interface principal
		this.setSize(800, 600);
		this.setResizable(false);
		this.setContentPane(getPainelConteudo());
		this.setTitle("BombarJ");
		this.setFocusable(true);

		// posiciona no centro da tela
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int posX = (screenSize.width - this.getWidth()) / 2;
		int posY = (screenSize.height - this.getHeight()) / 2;
		this.setLocation(posX, posY);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	/**
	 * Método que tem por função incializar o painel de conteúdo
	 * 
	 * @return Painel que terá o conteúdo a ser exbido ao usuário.
	 */
	public JPanel getPainelConteudo() {

		// cria o painel, caso não tenha sido criado ainda
		if (painelConteudo == null) {
			GridLayout gridLayout = new GridLayout();
			gridLayout.setColumns(1);
			painelConteudo = new JPanel();
			painelConteudo.setLayout(gridLayout);
		}

		return painelConteudo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
	 */
	public void keyPressed(KeyEvent e) {
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
	 */
	public void keyReleased(KeyEvent e) {
		// verifica se a tecla p foir pressionada e solta
		if ((e.getKeyChar() == 'p') || (e.getKeyChar() == 'P')) {
			controle.pause();
		}

		// verifica o pressionamento da barra de espaços
		if (e.getKeyCode() == 32) {
			controle.soltaProjetil();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	 */
	public void keyTyped(KeyEvent e) {

	}

	/**
	 * 
	 * Método que tem por função conectar a interface ao objeto de controle
	 * 
	 * @param controle
	 *            Objeto de controle que principalmente controla as ações do
	 *            jogo.
	 * 
	 */
	public void concetaControle(Controle controle) {
		this.controle = controle;
	}

} // @jve:decl-index=0:visual-constraint="13,12"
